home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #5 & #6 / Amiga Plus CD - 1995 - No. 5 and 6.iso / pd / serien / purity / nr.40 / aprint / aprintv2.21.p < prev    next >
Text File  |  1994-12-10  |  55KB  |  1,944 lines

  1. PROGRAM APrint; {V2.21}
  2.  
  3. {--------------------------------------------------------------------}
  4. { *** APrint ***        USES OS3 KickPascal-Includes
  5.  
  6.   © & P 1993-1994 by Falk Zühlsdorff (PackMAN)
  7.   FREEWARE: wenn nichts an Programm/Source/Anleitung verändert wird ;
  8.             folgende Files & der Icons müssen enthalten sein:
  9.             APrint, APrint.dok, Aprint.Bsp
  10.  
  11.  
  12.   Ideen, Spenden,Bugs an:
  13.  
  14.             PackMAN
  15.             c/o Falk Zühlsdorff
  16.             Lindenberg 66
  17.             98693 Ilmenau/Thür.
  18.                                                                      }
  19. {--------------------------------------------------------------------}
  20.  
  21. USES Reqtools,Gadtools,PrtChk,Graphics,EXECIO,APrintDruck,PButton;
  22. {$incl 'dos.lib};
  23.  
  24. {--------------------------------------------------------------------}
  25.  
  26. CONST Last:=50;                              {Begrenzung für Einträge}
  27.       Kenn:='@ap2@';
  28.       dk:='APrint_V1.1_Data';
  29.       dk2:='APV2.11Data';
  30.       dk3:='@ap2D@';
  31.       up:=chr(10);
  32. {--------------------------------------------------------------------}
  33. TYPE
  34.                  {--- Type Datenverwaltung / Druck ---}
  35.  
  36.       rec                  = RECORD
  37.                               name1,name2,Nr,Ort,Tel:STRING[36];
  38.                               Kz:STRING[11];
  39.                               Kzbr:cardinal;
  40.                               frei:boolean;
  41.                              END;
  42.  
  43.      PrinterIO=Record  {C: "union"-->Pascal: Record mit Variantenteil.}
  44.                 Case integer Of
  45.                  0: ( ios      : IOStdReq );
  46.                  1: ( iodrp    : IODRPReq );
  47.                  2: ( iopc     : IOPrtCmdReq );
  48.                End;
  49.                         {--- Type RTReq---}
  50.  
  51.      rttxtype              = string[300];
  52.  
  53.                {--- Type Tags / Pointer / Screen ... ---}
  54.  
  55.      helpstr               = string;
  56.      VTxType               = array[0..14] OF string;
  57.      TagType               = array[0..5] OF TagItem;
  58.      STagsType             = array[0..6] OF TagType;
  59.      CharLentype           = array[0..6] OF byte;
  60.  
  61.      tag_col_array         = array[1..10] of integer; {not word}
  62.      Pointerfeld           = array[1..40] OF Word;
  63.      CBTagType             = array[0..3] OF TagItem;
  64.  
  65. {--------------------------------------------------------------------}
  66.  
  67. VAR                    {-- VAR Win / Scr --}
  68.  
  69.     OWin                   : ^Window;
  70.     Prc                    : ^Process;
  71.     PrcH                   : Ptr;
  72.     Win,PWin               : ^Window;
  73.     RP,PRP                 : ^RastPort;
  74.     PScr,Screen            : p_screen;      {PublicScreen}
  75.     drawinfo               : p_drawinfo;    {dessen Drawinfo}
  76.     txattr                 : TextAttr;STATIC;
  77.     font                   : p_textfont;
  78.     msg                    : ^IntuiMessage;
  79.     akt                    : ^Gadget;
  80.     NSTags                 : array[1..15] of tagitem;STATIC;
  81.     NWTags                 : array[1..13] of tagitem;STATIC;
  82.     NWPTags                : array[1..13] OF TagItem;STATIC;
  83.     tag_col                : tag_col_array;STATIC;
  84.     vi                     : PTR;
  85.     rr,gg,bb                  : array[0..3] of Integer;STATIC;  {Farben}
  86.  
  87.                          {-- VAR Hilfe --}
  88.  
  89.     i                      : byte;STATIC;
  90.     ex,back                : boolean;STATIC;
  91.     winhelp,RT             : LONG;STATIC;
  92.     kzb1,freibr            : cardinal;STATIC;
  93.     ysize,rem,baseline     : word;STATIC;
  94.     Wbr                    : integer;STATIC;
  95.     screen_modeID, ourfont,
  96.     errorcode              : long;STATIC;
  97.     screenhelp             : boolean;STATIC;
  98.  
  99.     barheight              : cardinal;STATIC;
  100.     gfx                    : long;STATIC;
  101.     fontname,PTitle        : string;STATIC;
  102.     plus                   : integer;STATIC;
  103.     auto,nlq               : boolean;STATIC;
  104.     cancel,allfree,
  105.     autofirst              : boolean;STATIC;
  106.  
  107.     Code                   : Byte;STATIC;
  108.     gedr1,gedr2            : boolean;STATIC;
  109.     Scrtitel               : string;STATIC;
  110.     waitreq                : Requester;
  111.     PointerPtr             : ^Pointerfeld;
  112.  
  113.                          {-- VAR Gadgets --}
  114.  
  115.     ng                     : NewGadget;STATIC;
  116.     g                      : array[0..33] OF p_Gadget;STATIC; {Win}
  117.     GTags                  : array[0..3] OF TagItem;STATIC;   {B_Kind}
  118.  
  119.     CTags                  : array[0..3] OF TagItem;STATIC;   {CY_Kind}
  120.     cfeld                  : array[0..6] OF ^Helpstr;
  121.     CTx                    : array[0..4] OF string;STATIC;
  122.     cycleNrA, cycleNrB     : byte;STATIC;
  123.     cyclenrC,liRa            : Integer;STATIC;
  124.  
  125.     VTags                  : array[0..4] OF TagItem;STATIC;   {CY_Kind}
  126.     Vfeld                  : array[0..15] OF ^Helpstr;        {@-VGad}
  127.     VTx                    : VTxType;STATIC;
  128.     CBTags                 : array[0..1] OF CBTagType;STATIC; {CB_Kind}
  129.     ITags                  : array[0..3] OF TagItem;STATIC;   {IN_Kind}
  130.     BBTags                 : array[0..2] OF TagItem;STATIC;   {BevelBox}
  131.  
  132.     STx                    : array[0..6] OF string[70];STATIC;{ST_Kind}
  133.     STags                  : StagsType;STATIC;
  134.     charlen                : charlentype;STATIC;
  135.     StrAkt                 : boolean;STATIC;
  136.     sig                    : ^stringinfo;
  137.  
  138.     TTx                    : string;STATIC;                   {Tx_Kind}
  139.     TTags                  : array[0..3] OF TagItem;STATIC;
  140.  
  141.     SlTags                 : array[0..5]  OF TagItem;STATIC;  {SL_Kind}
  142.     Pg                     : array[0..14] OF p_Gadget;        {Vorein.}
  143.  
  144.  
  145.     pgad,glist,Ppgad,Pglist: p_Gadget;STATIC;
  146.  
  147.                       {--- VARs datenverwaltung ---}
  148.  
  149.     ein                    : array[1..Last] OF rec;STATIC;
  150.     abs                    : array[0..4] of string[70];STATIC;
  151.     datname,Dirname,FName  : string[108];STATIC;
  152.     FTags                  : array[0..1] of TagItem;STATIC;   {RT}
  153.     RTFTags                : array[0..3] of tagitem;STATIC;   {RT}
  154.     firstprt               : boolean;STATIC;
  155. {--------------------------------------------------------------------}
  156.  PROCEDURE SetPoi(ThisWin:p_Window);
  157.  VAR wreq : boolean;STATIC;
  158.  BEGIN
  159.   InitRequester(^waitReq);           {Req: 0*0*0*0}
  160.   wreq:=Request(^waitReq,ThisWin);
  161.   SetPointer(ThisWin,PointerPTR,16,16,-6,-1);
  162.  END;
  163. {--------------------------------------------------------------------}
  164.  PROCEDURE ClearPoi(ThisWin:p_Window);
  165.  BEGIN
  166.   ClearPointer(ThisWin);
  167.   EndRequest(^waitReq,ThisWin);
  168.  END;
  169. {--------------------------------------------------------------------}
  170. PROCEDURE CloseLibs;
  171. BEGIN
  172.  IF Gadtoolsbase<>NIL  THEN CloseLib(Gadtoolsbase);
  173.  IF RTbase<>NIL        THEN CloseLibrary(RTbase);
  174.  IF GFXbase<>NIL       THEN CloseLib(GFXBase);
  175.  IF Intuitionbase<>NIL THEN CloseLib(Intuitionbase);
  176. END;
  177. {--------------------------------------------------------------------}
  178. PROCEDURE CloseSome;
  179. BEGIN
  180.  ScreenToBack(Screen);
  181.  CloseWindow(Win);
  182.  FreeGadgets(glist);
  183.  FreeVisualInfo(vi);
  184.  Free_Mem(Long(Pointerptr),sizeof(Pointerfeld));
  185.  screenhelp:=CloseScreen(Screen);
  186.  CloseLibs;
  187. END;
  188. {--------------------------------------------------------------------}
  189. PROCEDURE Abschalten;
  190. BEGIN
  191.  rem:=RemoveGList(Win,g[11],-1);
  192. END;
  193. {--------------------------------------------------------------------}
  194. PROCEDURE Zuschalten;
  195. BEGIN
  196.  rem:=AddGList(Win,g[11],-1,-1,NIL);
  197. END;
  198. {--------------------------------------------------------------------}
  199. PROCEDURE message(lds:string);
  200. BEGIN
  201. TTx:=lds;
  202. GT_SetGadgetAttrsA(g[31],WIN,NIL,^TTags[2]);
  203. END;
  204. {--------------------------------------------------------------------}
  205. PROCEDURE RTFile(titel:string);
  206.  
  207. VAR     FileReq       : p_rtFileRequester;
  208.         req           : long;STATIC;
  209.  
  210. BEGIN
  211.   cancel:=false;
  212.   FileReq:=ptr(rtAllocRequestA(RT_FileReq,Nil));
  213.   IF FileReq<>Nil
  214.   THEN
  215.    BEGIN
  216.     RTFTags[1]:=TagItem(RT_Window,Long(Win));
  217.     req:=rtChangeReqAttr(filereq,^Ftags[0]);
  218.     req:=rtFileRequestA(FileReq,FName,titel,^RTFTags[0]);
  219.     IF req<>0
  220.      THEN
  221.       BEGIN
  222.        DirName:=FileReq^.Dir;
  223.        IF (DirName<>'') AND (DirName[length(DirName)]<>':')
  224.            AND  ((DirName[length(DirName)]<>'/'))
  225.              THEN datname:=DirName+'/'+Fname
  226.              ELSE datname:=DirName+Fname;
  227.       END
  228.      ELSE cancel:=true;
  229.     rtFreeRequest(FileReq);
  230.    END;
  231. END;
  232. {--------------------------------------------------------------------}
  233. FUNCTION RTReqFirst(Titel,Text,gadtx:string):long;
  234. VAR tags        : array[0..6] of tagitem;STATIC;
  235. BEGIN
  236.    Tags[0]:=TagItem(RTEZ_Reqtitle,Long(^titel));
  237.    Tags[1]:=TagItem(RTGS_GadFmt,long(^gadtx));
  238.    Tags[2]:=TagItem(RT_UnderScore,long('_'));
  239.    Tags[3]:=TagItem(RTGS_BackFill,long(false));
  240.    Tags[4]:=TagItem(RTGS_Flags,GSREQF_CENTERTEXT or
  241.                                GSREQF_HIGHLIGHTTEXT);
  242.    Tags[5]:=TagItem(RT_ReqPos,ReqPos_TopLeftScr);
  243.    Tags[6].ti_tag:=Tag_END;
  244.    RTReqFirst:=rtEZRequestA(^Text,^gadtx,NIL,NIL,^Tags[0]);
  245. END;
  246. {--------------------------------------------------------------------}
  247. FUNCTION RTReq(Titel:string;Text:rttxtype;gadtx:string;pos:byte):long;
  248. VAR tags : array[0..9] of tagitem;STATIC;
  249. BEGIN
  250.    Tags[0]:=TagItem(RTEZ_Reqtitle,Long(^titel));
  251.    Tags[1]:=TagItem(RTGS_GadFmt,long(^gadtx));
  252.    Tags[2]:=TagItem(RT_UnderScore,long('_'));
  253.    Tags[3]:=TagItem(RTGS_BackFill,long(false));
  254.    Tags[4]:=TagItem(RT_ReqPos,pos);
  255.    Tags[5]:=TagItem(RTGS_Flags,GSREQF_CENTERTEXT or
  256.                                GSREQF_HIGHLIGHTTEXT);
  257.    Tags[6]:=TagItem(RT_TextAttr,long(^txattr));
  258.    Tags[7]:=TagItem(RT_Window,long(Win));
  259.    Tags[8]:=TagItem(RT_LockWindow,1);
  260.    Tags[9].ti_tag:=Tag_END;
  261.    RTReq:=rtEZRequestA(^Text,^gadtx,NIL,NIL,^Tags[0]);
  262. END;
  263. {--------------------------------------------------------------------}
  264. PROCEDURE Infoline;
  265. BEGIN
  266.  RT:=RTReq('Information',
  267.          'DAS Adreßdruckprogramm für Homeuser.'+up+up+
  268.          'FREEWARE'+up+up+'Autor:'+up+up+
  269.          'Falk Zühlsdorff'+up+'Lindenberg 66'+up+
  270.          'D-98693 Ilmenau'+up+up+
  271.          'Internet: ai036@rz.tu-ilmenau.de'+up+up+
  272.          'Grüße an:'+up+
  273.          'dopW, Janosh, Diesel, Røgersøft...'+up+up+
  274.          'Erstellt in KickPascal 2.12/OS3.1.',
  275.          '_Yho',ReqPos_CenterWin);
  276.  message(' Info gelesen.');
  277. END;
  278. {--------------------------------------------------------------------}
  279. PROCEDURE HelpLine;
  280. BEGIN
  281.  RT:=RTReq('Kurzhilfe',
  282.          'Tastaturunterstützung u.a.'+up+up+
  283.          '1..0: Adreßgadgets (linker Rand)'+up+
  284.          'X: Wahlschalter Absender'+up+
  285.          'W: Wahlschalter Adreßbereich'+up+up+
  286.          'ACHTUNG: für Tastencodes immer erst'+up+
  287.          'Stringgadgets deaktivieren.',
  288.          '_Danke',ReqPos_CenterWin);
  289.  message(' Hilfe gelesen.');
  290. END;
  291. {--------------------------------------------------------------------}
  292. PROCEDURE PosTx(Nr:byte;Txbr:cardinal;Tx:string);       {hä ???}
  293. BEGIN
  294.  SetAPen(RP,0);
  295.  RectFill(RP,Wbr+3,ysize+2+(Nr*ysize*2),12*Wbr-3,
  296.           2*ysize+4+(Nr*ysize*2));
  297.  SetAPen(RP,3);
  298.  Move(RP,Wbr+ROUND((11*Wbr-Txbr)/2),
  299.          2*ysize+(Nr*ysize*2)+1+ysize-baseline+plus-1);
  300.  gfx:=_Text(RP,^Tx,Strlen(Tx));
  301. END;
  302. {--------------------------------------------------------------------}
  303. PROCEDURE Setcolor(Nr,R,G,B:byte);
  304. BEGIN
  305.  setRGB4(^Screen^.ViewPort,Nr,R,G,B);
  306. END;
  307. {--------------------------------------------------------------------}
  308. PROCEDURE Grundeinstellung;
  309. BEGIN
  310.  rr[0]:=11; gg[0]:=11; bb[0]:=11;
  311.  rr[1]:=0;  gg[1]:=0;  bb[1]:=0;
  312.  rr[2]:=15; gg[2]:=15; bb[2]:=15;
  313.  rr[3]:=6;  gg[3]:=7;  bb[3]:=13;
  314.  cycleNrC:=1;
  315.  auto:=true;
  316.  nlq:=true;
  317.  liRa:=0;
  318.  autofirst:=false;
  319.  datname:='';
  320.  Dirname:='SYS:';
  321.  Fname:='';
  322. END;
  323. {------------------------------------------------------------------------}
  324. PROCEDURE loeschen;
  325. BEGIN
  326.  FOR i:=0 TO 5 DO
  327.   STx[i]:='';
  328.  FOR i:=0 TO 5 DO
  329.   GT_SetGadgetAttrsA(g[12+i],WIN,NIL,^STags[i,3]);
  330. END;
  331. {------------------------------------------------------------------------}
  332. PROCEDURE DSDel(Nr:byte);
  333. BEGIN
  334.  ein[Nr].name1:='';
  335.  ein[Nr].name2:='';
  336.  ein[Nr].Nr:='';
  337.  ein[Nr].Ort:='';
  338.  ein[Nr].Tel:='';
  339.  ein[Nr].Kz:='';
  340.  ein[Nr].kzbr:=0;
  341.  ein[Nr].frei:=true;
  342. END;
  343. {------------------------------------------------------------------------}
  344. PROCEDURE wechseln;
  345. BEGIN
  346.  FOR i:=0 TO 9 DO
  347.    IF ein[i+1+10*cycleNrA].frei
  348.     THEN PosTx(i,freibr,'frei')
  349.     ELSE PosTx(i,ein[i+1+10*cycleNrA].kzbr,ein[i+1+10*cycleNrA].kz);
  350. END;
  351. {---------------------------------------------------------------------}
  352. PROCEDURE cycleA;
  353. BEGIN
  354.  IF gedr1 OR gedr2
  355.   THEN
  356.    IF cycleNrA=0  THEN cycleNrA:=4
  357.                   ELSE DEC(cycleNrA)
  358.   ELSE
  359.    IF cycleNrA=4  THEN  cycleNrA:=0
  360.                   ELSE INC(cycleNrA);
  361.  
  362.   CTags[0]:=TagItem(GTCY_Active,cycleNrA);
  363.   GT_SetGadgetAttrsA(g[10],WIN,NIL,^CTags[0]);
  364.  wechseln;
  365. END;
  366. {---------------------------------------------------------------------}
  367. PROCEDURE cycleB;
  368. BEGIN
  369.  sig:=g[18]^.SpecialInfo;
  370.  Abs[cycleNrB]:=sig^.buffer;
  371.  IF gedr1 OR gedr2
  372.   THEN
  373.    IF cycleNrB=0  THEN cycleNrB:=4
  374.                   ELSE DEC(cycleNrB)
  375.   ELSE
  376.    IF cycleNrB=4  THEN  cycleNrB:=0
  377.                   ELSE INC(cycleNrB);
  378.  
  379.   CTags[0]:=TagItem(GTCY_Active,cycleNrB);
  380.   GT_SetGadgetAttrsA(g[30],WIN,NIL,^CTags[0]);
  381.  
  382.   STx[6]:=Abs[cycleNrB];
  383.   GT_SetGadgetAttrsA(g[18],WIN,NIL,^STags[6,3]);
  384. END;
  385. {------------------------------------------------------------------------}
  386. PROCEDURE cycleC;
  387. BEGIN
  388.  IF gedr1 OR gedr2
  389.   THEN
  390.    IF cycleNrC=0  THEN cycleNrC:=14
  391.                   ELSE DEC(cycleNrC)
  392.   ELSE
  393.    IF cycleNrC=14 THEN cycleNrC:=0
  394.                   ELSE INC(cycleNrC);
  395.  
  396.   VTags[0]:=TagItem(GTCY_Active,cycleNrC);
  397.   GT_SetGadgetAttrsA(g[32],WIN,NIL,^VTags[0]);
  398. END;
  399. {---------------------------------------------------------------------}
  400. PROCEDURE Ausgabe(Nr:byte);
  401. BEGIN
  402.  Stx[0]:=ein[Nr+10*cycleNrA].name1;
  403.  Stx[1]:=ein[Nr+10*cycleNrA].name2;
  404.  Stx[2]:=ein[Nr+10*cycleNrA].Nr;
  405.  Stx[3]:=ein[Nr+10*cycleNrA].Ort;
  406.  Stx[4]:=ein[Nr+10*cycleNrA].Tel;
  407.  Stx[5]:=ein[Nr+10*cycleNrA].Kz;
  408.  FOR i:=0 TO 5 DO
  409.   GT_SetGadgetAttrsA(g[12+i],WIN,NIL,^STags[i,3]);
  410. END;
  411. {------------------------------------------------------------------------}
  412. PROCEDURE Uebernehmen(Nr:byte);
  413. BEGIN
  414.  IF allfree THEN allfree:=false;
  415.  ein[Nr+10*cycleNrA].name1:=STX[0];
  416.  ein[Nr+10*cycleNrA].name2:=STX[1];
  417.  ein[Nr+10*cycleNrA].Nr:=STX[2];
  418.  ein[Nr+10*cycleNrA].Ort:=STX[3];
  419.  ein[Nr+10*cycleNrA].Tel:=STX[4];
  420.  ein[Nr+10*cycleNrA].Kz:=STX[5];
  421.  ein[Nr+10*cycleNrA].kzbr:=kzb1;
  422.  ein[Nr+10*cycleNrA].frei:=false;
  423.  PosTx(Nr-1,kzb1,STx[5]);
  424.  message(' Eintrag übernommen.');
  425. END;
  426. {------------------------------------------------------------------------}
  427. PROCEDURE GetAddy;
  428. VAR i   : byte;STATIC;
  429.  
  430. BEGIN
  431.  FOR i:=12 TO 18 DO
  432.   BEGIN
  433.    sig:=g[i]^.SpecialInfo;
  434.    STx[i-12]:=sig^.buffer;
  435.   END;
  436.  Kzb1:=textlength(^Screen^.rastport,^STx[5],strlen(STx[5]));
  437. END;
  438. {------------------------------------------------------------------------}
  439. PROCEDURE KopDel(yho:byte);
  440. VAR e:boolean;STATIC;
  441.  BEGIN
  442.   IF yho=1
  443.    THEN
  444.     BEGIN
  445.      GetAddy;
  446.      IF (STx[0]='') AND (STx[1]='') AND (STx[2]='') AND (STx[3]='') AND
  447.         (STx[4]='') AND (STx[5]='')
  448.       THEN
  449.        BEGIN
  450.         message(' Sinnlos zu kopieren, Eintrag leer !!!');
  451.         EXIT;
  452.        END;
  453.  
  454.      IF kzb1>10*Wbr
  455.       THEN
  456.        BEGIN
  457.         RT:=RTReq('APrint V2.21',
  458.          'KÜRZEL enthält untypische'\10'Zeichen, bitte kürzen/ändern.',
  459.          '_Gut',4);
  460.         exit;
  461.        END;
  462.      message(' Kopieren: Anwählen (1..0) / Abbruch (ESC)...');
  463.     END
  464.    ELSE
  465.     message(' Lösche Datensatz: Anwählen (1..0) / Abbruch (ESC).');
  466.  
  467.   DisplayBeep(Screen);
  468.   e:=false;
  469.   Abschalten;
  470.   REPEAT
  471.     Msg:=Wait_Port(Win^.Userport);
  472.     Msg:=GT_GetIMsg(Win^.userport);
  473.     GT_ReplyIMsg(Msg);
  474.     Akt:=Msg^.IAddress;
  475.     CASE Msg^.class OF
  476.      IDCMP_MOUSEBUTTONS :
  477.       BEGIN
  478.        IF yho=1 THEN message(' Kopieren: abgebrochen...')
  479.                 ELSE message(' Lösche Datensatz: abgebrochen...');
  480.        e:=true;
  481.       END;
  482.      IDCMP_GADGETUP:
  483.       CASE Akt^.GadgetID OF
  484.       0..9: IF yho=1
  485.              THEN
  486.               BEGIN
  487.                Uebernehmen(Akt^.GadgetID+1);
  488.                e:=true;
  489.               END
  490.              ELSE
  491.               BEGIN
  492.                DSDel(CycleNrA*10+Akt^.GadgetID+1);
  493.                PosTx(Akt^.GadgetID,freibr,'frei');
  494.                e:=true;
  495.                message(' Datensatz gelöscht.');
  496.               END
  497.         10: BEGIN cycleNrA:=Msg^.Code; wechseln; END;
  498.       ELSE;END;
  499.      RAWKEY:
  500.       BEGIN
  501.        Code:=Msg^.Code;
  502.        CASE (Code AND $7f) OF
  503.         $60: IF (Code AND $80)=0
  504.               THEN gedr1:=true ELSE gedr1:=false;
  505.         $61: IF (Code AND $80)=0
  506.               THEN gedr2:=true ELSE gedr2:=false;
  507.        ELSE
  508.         CASE Msg^.code OF
  509.          $11: cycleA; {W @}
  510.          $01..$0A:
  511.           IF yho=1
  512.            THEN
  513.             BEGIN Uebernehmen(long(Msg^.Code));e:=true; END
  514.            ELSE
  515.             BEGIN
  516.              DsDel(CycleNrA*10+long(Msg^.Code));
  517.              PosTx(long(Msg^.Code)-1,freibr,'frei');
  518.              e:=true;
  519.              message(' Datensatz gelöscht.');
  520.             END;
  521.          $44,
  522.          $45:
  523.           BEGIN
  524.            IF yho=1 THEN message(' Kopieren: abgebrochen...')
  525.                     ELSE message(' Lösche Datensatz: abgebrochen...');
  526.            e:=true;
  527.           END;
  528.         ELSE;END;
  529.        END;
  530.       END;
  531.     ELSE;END;
  532.   UNTIL e;
  533.  
  534.   Zuschalten;
  535.  
  536.  END;
  537. {---------------------------------------------------------------------}
  538. PROCEDURE alldel;
  539. BEGIN
  540.  IF NOT allfree
  541.   THEN
  542.    BEGIN
  543.     FOR i:=1 TO 50 DO DSDel(i);
  544.     allfree:=true;
  545.    END;
  546.  Loeschen;
  547.  FOR i:=0 TO 4 DO Abs[i]:='';
  548.  STx[6]:='';
  549.  GT_SetGadgetAttrsA(g[18],WIN,NIL,^STags[6,3]);
  550.  cycleNrA:=4; cycleA;
  551.  cycleNrB:=4; cycleB;
  552. END;
  553. {---------------------------------------------------------------------}
  554. PROCEDURE Neu;
  555. VAR help:boolean;
  556. BEGIN
  557.  RT:=RTReq('APrint V2.21',
  558.        'NEU: Bitte zu löschenden Bereich anwählen.',
  559.        '_Alles|_Datensatz|_Einträge|Ab_s (alle)|A_bs|_Nichts',0);
  560.  CASE RT OF
  561.   1: BEGIN
  562.       SetPoi(Win);Alldel;
  563.       message(' Alles gelöscht.');ClearPoi(Win);
  564.      END;
  565.   2: BEGIN
  566.       KopDel(0); {DS-loeschen}
  567.       help:=false;
  568.       i:=1;
  569.       REPEAT
  570.        IF ein[i].frei=false THEN help:=true;
  571.        Inc(i);
  572.       UNTIL (i=51) or (help);
  573.       IF NOT help THEN allfree:=true;
  574.      END;
  575.   3: BEGIN IF NOT allfree
  576.             THEN
  577.              BEGIN
  578.               SetPoi(Win);
  579.               FOR i:=1 TO 50 DO DSDel(i);
  580.               ClearPoi(Win);
  581.              END;
  582.            cyclenrA:=4; cycleA;
  583.            message(' Einträge gelöscht.');
  584.            allfree:=true;
  585.      END;
  586.   4: BEGIN FOR i:=0 TO 4 DO Abs[i]:=''; STx[6]:='';
  587.            GT_SetGadgetAttrsA(g[18],WIN,NIL,^STags[6,3]);
  588.            cycleNrB:=4;cycleB;
  589.            message(' Alle Absender gelöscht.'); END;
  590.   5: BEGIN Abs[cycleNrB]:='';STx[6]:='';
  591.            GT_SetGadgetAttrsA(g[18],WIN,NIL,^STags[6,3]);
  592.            message(' Absender gelöscht.'); END;
  593.  ELSE;END;
  594. END;
  595. {---------------------------------------------------------------------}
  596. PROCEDURE Prefs;
  597. VAR endpr       : boolean;STATIC;
  598.     ru,gu,bu    : array[0..3] of INTEGER;STATIC;
  599.     ActCol      : byte;STATIC;
  600.     yho         : boolean;STATIC;
  601.     nlqUP,autoUP: boolean;STATIC;
  602.  
  603.  {--- UP Prefs ---}
  604.  
  605.  PROCEDURE SetNumb(Nr,Act:byte);
  606.  VAR mystr:string[3];STATIC;
  607.   BEGIN
  608.    mystr:=IntStr(Act);
  609.    SetAPen(PRP,0);
  610.    RectFill(PRP,27*Wbr,3*ysize+Nr*2*ysize,34*Wbr,4*ysize+Nr*2*ysize);
  611.    SetAPen(PRP,1);
  612.    Move(PRP,27*Wbr,3*ysize+baseline+Nr*2*ysize);
  613.    gfx:=_Text(PRP,mystr,strlen(mystr));
  614.   END;
  615.  
  616.  {--- UP Prefs ---}
  617.  
  618.  PROCEDURE SetProp(Nr,Prop:byte);
  619.   BEGIN
  620.    SlTags[4]:=TagItem(GTSL_Level,Nr);
  621.    GT_SetGadgetAttrsA(Pg[Prop],PWin,NIL,^SLTags[4]);
  622.   END;
  623.  
  624.  {--- UP Prefs ---}
  625.  
  626.  PROCEDURE SetCol;
  627.  BEGIN
  628.   SetAPen(PRP,ActCol);
  629.   RectFill(PRP,35*Wbr+4,4*ysize+Round(ysize/2)+2,
  630.             39*Wbr-5,6*ysize+Round(ysize/2)-3);
  631.  
  632.   SetNumb(0,ru[ActCol]);
  633.   SetNumb(1,gu[ActCol]);
  634.   SetNumb(2,bu[ActCol]);
  635.   SetProp(ru[ActCol],0);
  636.   SetProp(gu[ActCol],1);
  637.   SetProp(bu[ActCol],2);
  638.  END;
  639.  
  640.  {--- UP Prefs ---}
  641.  
  642.  PROCEDURE StanCols;
  643.   BEGIN
  644.    ru[0]:=11; gu[0]:=11; bu[0]:=11;
  645.    ru[1]:=0;  gu[1]:=0;  bu[1]:=0;
  646.    ru[2]:=15; gu[2]:=15; bu[2]:=15;
  647.    ru[3]:=6;  gu[3]:=7;  bu[3]:=13;
  648.    ActCol:=0;
  649.    SetCol;
  650.    FOR i:=0 TO 3 DO setcolor(i,ru[i],gu[i],bu[i]);
  651.   END;
  652.  
  653.  {--- UP Prefs ---}
  654.  
  655.  PROCEDURE LastCols;
  656.   BEGIN
  657.    FOR i:=0 TO 3 DO
  658.     BEGIN
  659.      ru[i]:=rr[i];
  660.      gu[i]:=gg[i];
  661.      bu[i]:=bb[i];
  662.     END;
  663.    ActCol:=0;
  664.    SetCol;
  665.    FOR i:=0 TO 3 DO setcolor(i,ru[i],gu[i],bu[i]);
  666.   END;
  667.  
  668.  {--- UP Prefs ---}
  669.  
  670.  PROCEDURE CheckIT(nr:byte);
  671.  BEGIN
  672.   IF Nr=0
  673.    THEN
  674.     BEGIN
  675.      IF nlqUP THEN nlqUP:=false
  676.               ELSE nlqUP:=true;
  677.      IF nlqUP THEN CBTags[0,2]:=TagItem(GTCB_Checked,ord(true))
  678.               ELSE CBTags[0,2]:=TagItem(GTCB_Checked,ord(false));
  679.      GT_SetGadgetAttrsA(Pg[12],PWin,NIL,^CBTags[0,2]);
  680.     END
  681.    ELSE
  682.     BEGIN
  683.      IF autoUP THEN autoUP:=false
  684.                ELSE autoUP:=true;
  685.      IF autoUP THEN CBTags[1,2]:=TagItem(GTCB_Checked,ord(true))
  686.                ELSE CBTags[1,2]:=TagItem(GTCB_Checked,ord(false));
  687.      GT_SetGadgetAttrsA(Pg[13],PWin,NIL,^CBTags[1,2]);
  688.     END;
  689.  END;
  690.  
  691.    {---- UP Prefs ----}
  692.  
  693.  PROCEDURE benutzen(yho:integer);
  694.  BEGIN
  695.   FOR i:=0 TO 3 DO rr[i]:=ru[i];
  696.   FOR i:=0 TO 3 DO gg[i]:=gu[i];
  697.   FOR i:=0 TO 3 DO bb[i]:=bu[i];
  698.   nlq:=nlqUP;
  699.   auto:=autoUP;
  700.   sig:=Pg[14]^.SpecialInfo;
  701.   IF yho<>1 THEN message(' Benutze Voreinstellungen');
  702.   VAL (sig^.buffer,liRa,yho);
  703.   endpr:=true;
  704.  END;
  705.  
  706.    {--- UP Prefs ---}
  707.  
  708.  PROCEDURE savecon;
  709.  VAR f:text;
  710.  BEGIN
  711.   benutzen(1);
  712.   rewrite(f,'ENVARC:APrint.prefs');
  713.   IF IOResult=0
  714.    THEN
  715.     BEGIN
  716.      writeln(f,kenn);
  717.      FOR i:=0 TO 3 DO
  718.       BEGIN
  719.        writeln(f,rr[i]);
  720.        writeln(f,gg[i]);
  721.        writeln(f,bb[i]);
  722.       END;
  723.      IF nlqUP THEN writeln(f,'1') ELSE writeln(f,'0');
  724.      IF autoUP THEN writeln(f,'1') ELSE writeln(f,'0');
  725.      writeln(f,datname);
  726.      writeln(f,dirname);
  727.      writeln(f,FName);
  728.      writeln(f,liRa);
  729.      writeln(f,cycleNrC);
  730.      close(f);
  731.      message(' Konfiguration gespeichert.');
  732.     END
  733.    ELSE  message(' Konnte "Konfiguration" nicht speichern.');
  734.  END;
  735.  
  736.    {--- UP Prefs ----}
  737.  
  738.  PROCEDURE Abbruch;
  739.  BEGIN
  740.   FOR i:=0 TO 3 DO
  741.    setcolor(i,rr[i],gg[i],bb[i]);
  742.   message(' Prefs abgebrochen...');
  743.   endpr:=true;
  744.  END;
  745.  
  746.  {---- begin of PREFS ----}
  747.  
  748. BEGIN
  749.  IF nlq  THEN nlqUP:=false  ELSE nlqUP:=true;
  750.  IF auto THEN autoUP:=false ELSE autoUP:=true;
  751.  ActCol:=0;
  752.  
  753.  IF nlqUP THEN CBTags[0,2]:=TagItem(GTCB_Checked,ord(true))
  754.           ELSE CBTags[0,2]:=TagItem(GTCB_Checked,ord(false));
  755.  IF autoUP THEN CBTags[1,2]:=TagItem(GTCB_Checked,ord(true))
  756.            ELSE CBTags[1,2]:=TagItem(GTCB_Checked,ord(false));
  757.  
  758.  FOR i:=0 TO 3 DO
  759.   BEGIN
  760.    ru[i]:=rr[i];
  761.    gu[i]:=gg[i];
  762.    bu[i]:=bb[i];
  763.   END;
  764.  PWin:=NIL;
  765.  PWin:=openwindowtaglist(nil,^NWPTags[1]);
  766.  IF PWin=NIL
  767.   THEN
  768.    BEGIN message(' Prefs: Kann Prefsfenster nicht öffnen');exit;END;
  769.  
  770.  PRP:=PWin^.RPort;
  771.  ourfont:=setfont(PRP,font);
  772.  
  773.  DrawBevelBoxA(PRP,35*Wbr,4*ysize+ROUND(ysize/2),4*Wbr,2*ysize,^BBTags[0]);
  774.  
  775.  FOR i:=0 TO 1 DO
  776.   DrawBevelBoxA(PRP,42*Wbr+i*5*Wbr,3*ysize+1,4*Wbr,2*ysize,^BBTags[1]);
  777.  FOR i:=0 TO 1 DO
  778.   DrawBevelBoxA(PRP,42*Wbr+i*5*Wbr,6*ysize-1,4*Wbr,2*ysize,^BBTags[1]);
  779.  
  780.  GT_RefreshWindow(PWin,NIL);
  781.  
  782.  ITags[2]:=TagItem(GTIN_Number,liRa);
  783.  GT_SetGadgetAttrsA(Pg[14],PWin,NIL,^ITags[2]);
  784.  
  785.  SetAPen(PRP,3);
  786.  Move(PRP,43*Wbr+round(Wbr/2)+
  787.          ROUND((Wbr-textlength(^Screen^.rastport,'1',1))/2),
  788.          4*ysize+round(baseline/2));
  789.  gfx:=_Text(PRP,'1',1);
  790.  
  791.  SetAPen(PRP,1);
  792.  RectFill(PRP,47*Wbr+4,3*ysize+3,51*Wbr-5,5*ysize-2);
  793.  SetAPen(PRP,2);SetBPen(PRP,1);
  794.  Move(PRP,48*Wbr+round(Wbr/2)+
  795.           ROUND((Wbr-textlength(^Screen^.rastport,'2',1))/2),
  796.          4*ysize+round(baseline/2));
  797.  gfx:=_Text(PRP,'2',1);
  798.  
  799.  SetAPen(PRP,2);
  800.  RectFill(PRP,42*Wbr+4,6*ysize+1,46*Wbr-5,8*ysize-4);
  801.  SetAPen(PRP,1);SetBPen(PRP,2);
  802.  Move(PRP,43*Wbr+round(Wbr/2)+
  803.           ROUND((Wbr-textlength(^Screen^.rastport,'3',1))/2),
  804.          7*ysize+round(baseline/2)-2);
  805.  gfx:=_Text(PRP,'3',1);
  806.  
  807.  SetAPen(PRP,3);
  808.  RectFill(PRP,47*Wbr+4,6*ysize+1,51*Wbr-5,8*ysize-4);
  809.  SetAPen(PRP,0);SetBPen(PRP,3);
  810.  Move(PRP,48*Wbr+round(Wbr/2)+
  811.           ROUND((Wbr-textlength(^Screen^.rastport,'4',1))/2),
  812.           7*ysize+round(baseline/2)-2);
  813.  gfx:=_Text(PRP,'4',1);
  814.  
  815.  SetBPen(PRP,0);
  816.  
  817.  SetCol;
  818.  CheckIT(0);
  819.  CheckIT(1);
  820.  
  821.  SetPoi(Win);
  822.  
  823.  endpr:=false;
  824.  
  825.  REPEAT
  826.   Msg:=Wait_port(PWin^.userport);
  827.   Msg:=GT_GetIMsg(PWin^.UserPort);
  828.   GT_ReplyIMsg(Msg);
  829.   Akt:=Msg^.IAddress;
  830.   CASE Msg^.class OF
  831.    IDCMP_CLOSEWINDOW: Abbruch;
  832.    IDCMP_GADGETUP,IDCMP_GADGETDOWN,IDCMP_MOUSEMOVE:
  833.     CASE Akt^.GadgetID OF
  834.      0: BEGIN
  835.          ru[ActCol]:=Msg^.Code;
  836.          SetNumb(0,ru[ActCol]);
  837.          setcolor(ActCol,ru[ActCol],gu[ActCol],bu[ActCol]);
  838.         END;
  839.      1: BEGIN
  840.          gu[ActCol]:=Msg^.Code;
  841.          SetNumb(1,gu[ActCol]);
  842.          setcolor(ActCol,ru[ActCol],gu[ActCol],bu[ActCol]);
  843.         END;
  844.      2: BEGIN
  845.          bu[ActCol]:=Msg^.Code;
  846.          SetNumb(2,bu[ActCol]);
  847.          setcolor(ActCol,ru[ActCol],gu[ActCol],bu[ActCol]);
  848.         END;
  849.      3..6:  IF ActCol<>Akt^.GadgetID-3
  850.              THEN
  851.               BEGIN
  852.                ActCol:=Akt^.GadgetID-3;
  853.                SetCol;
  854.               END;
  855.      7: StanCols;
  856.      8: LastCols;
  857.      9: savecon;
  858.     10: benutzen(0);
  859.     11: abbruch;
  860.     12: IF nlqUP THEN nlqUP:=false
  861.                  ELSE nlqUP:=true;
  862.     13: IF autoUP THEN autoUP:=false
  863.                   ELSE autoUP:=true;
  864.     ELSE;END;
  865.    IDCMP_RAWKEY:
  866.     BEGIN
  867.      Code:=Msg^.Code;
  868.      CASE (Code AND $7f) OF
  869.       $60: IF (Code AND $80)=0
  870.             THEN gedr1:=true ELSE gedr1:=false;
  871.       $61: IF (Code AND $80)=0
  872.             THEN gedr2:=true ELSE gedr2:=false;
  873.       ELSE
  874.        CASE Msg^.code OF
  875.         $01..$04: IF ActCol<>Msg^.Code-1                 {1..4}
  876.                    THEN
  877.                     BEGIN
  878.                      ActCol:=Msg^.Code-1;
  879.                      SetCol;
  880.                     END;
  881.         $22: BEGIN PButton(PWin,Pg[7],1); StanCols; END; {D}
  882.         $14: BEGIN PButton(PWin,Pg[8],1); LastCols; END; {T}
  883.         $10,
  884.         $45,     {Q/A/E/ESC}
  885.         $20,
  886.         $12: BEGIN PButton(PWin,Pg[11],1); Abbruch; END;
  887.         $36: CheckIT(0);
  888.         $18: CheckIT(1)
  889.         $27: StrAkt:=ActivateGadget(Pg[14],PWin,NIL);
  890.         $21: BEGIN PButton(PWin,Pg[9],1);  savecon;     END; {S}
  891.         $15: BEGIN PButton(PWin,Pg[10],1); benutzen(0); END; {Z}
  892.  
  893.         $13: BEGIN        {R}
  894.               yho:=false;
  895.               IF (gedr1) OR (gedr2)
  896.                THEN
  897.                 IF ru[ActCol]>0
  898.                  THEN
  899.                   BEGIN
  900.                    DEC(ru[ActCol]);
  901.                    yho:=true;
  902.                   END
  903.                  ELSE {nix}
  904.                ELSE
  905.                 IF ru[ActCol]<15
  906.                  THEN
  907.                   BEGIN
  908.                    INC(ru[ActCol]);
  909.                    yho:=true;
  910.                   END;
  911.               IF yho
  912.                THEN
  913.                 BEGIN
  914.                  SetProp(ru[ActCol],0);
  915.                  SetNumb(0,ru[ActCol]);
  916.                  setcolor(ActCol,ru[ActCol],gu[ActCol],bu[ActCol]);
  917.                 END;
  918.              END;
  919.         $24: BEGIN  {G}
  920.               yho:=false;
  921.               IF (gedr1) OR (gedr2)
  922.                THEN
  923.                 IF gu[ActCol]>0
  924.                  THEN
  925.                   BEGIN
  926.                    DEC(gu[ActCol]);
  927.                    yho:=true;
  928.                   END
  929.                  ELSE {nix}
  930.                ELSE
  931.                 IF gu[ActCol]<15
  932.                  THEN
  933.                   BEGIN
  934.                    INC(gu[ActCol]);
  935.                    yho:=true;
  936.                   END;
  937.               IF yho
  938.                THEN
  939.                 BEGIN
  940.                  SetProp(gu[ActCol],1);
  941.                  SetNumb(1,gu[ActCol]);
  942.                  setcolor(ActCol,ru[ActCol],gu[ActCol],bu[ActCol]);
  943.                 END;
  944.              END;
  945.         $35: BEGIN  {B}
  946.               yho:=false;
  947.               IF (gedr1) OR (gedr2)
  948.                THEN
  949.                 IF bu[ActCol]>0
  950.                  THEN
  951.                   BEGIN
  952.                    DEC(bu[ActCol]);
  953.                    yho:=true;
  954.                   END
  955.                  ELSE {nix}
  956.                ELSE
  957.                 IF bu[ActCol]<15
  958.                  THEN
  959.                   BEGIN
  960.                    INC(bu[ActCol]);
  961.                    yho:=true;
  962.                   END;
  963.               IF yho
  964.                THEN
  965.                 BEGIN
  966.                  SetProp(bu[ActCol],2);
  967.                  SetNumb(2,bu[ActCol]);
  968.                  setcolor(ActCol,ru[ActCol],gu[ActCol],bu[ActCol]);
  969.                 END;
  970.              END;
  971.       ELSE;END;
  972.      END;
  973.     END;
  974.   ELSE;END;
  975.  UNTIL endpr;
  976.  CloseWindow(PWin);
  977.  ClearPoi(Win);
  978. END;
  979. {---------------------------------------------------------------------}
  980.  PROCEDURE Load;
  981.  VAR lo   : text;STATIC;
  982.      t    : string;STATIC;
  983.      help : byte;STATIC;
  984.  
  985.  {--V2_11---}
  986.  
  987.  PROCEDURE V2_11;
  988.   BEGIN
  989.    AllDel;
  990.    FOR i:=0 TO 4 DO readln(lo,Abs[i]);                   {Abs1-5}
  991.    i:=1;
  992.    REPEAT
  993.     readln(lo,ein[i].name1);
  994.     readln(lo,ein[i].name2);
  995.     readln(lo,ein[i].Nr);
  996.     readln(lo,ein[i].Ort);
  997.     readln(lo,ein[i].Tel);
  998.     readln(lo,ein[i].KZ);
  999.     ein[i].kzbr:=textlength(^Screen^.rastport,^ein[i].Kz,strlen(ein[i].kz));
  1000.     ein[i].frei:=false;
  1001.     Inc(i);
  1002.    UNTIL eof(lo);
  1003.    help:=3;
  1004.   END;
  1005.  
  1006.   {---V1_1---}
  1007.  
  1008.  PROCEDURE V1_1;
  1009.   BEGIN
  1010.    AllDel;
  1011.    readln(lo,Abs[0]);                   {Abs}
  1012.    i:=1;
  1013.    REPEAT
  1014.     readln(lo,ein[i].name1);
  1015.     readln(lo,ein[i].name2);
  1016.     readln(lo,ein[i].Nr);
  1017.     readln(lo,ein[i].Ort);
  1018.     readln(lo,ein[i].KZ);
  1019.     ein[i].kzbr:=textlength(^Screen^.rastport,^ein[i].Kz,strlen(ein[i].kz));
  1020.     ein[i].frei:=false;
  1021.     Inc(i);
  1022.    UNTIL eof(lo);
  1023.    help:=3;
  1024.   END;
  1025.  
  1026. {--begin of load---}
  1027.  
  1028.  BEGIN
  1029.     IF NOT autofirst
  1030.      THEN RTfile('Anschriften Laden:');
  1031.     IF (cancel=false) OR (autofirst)
  1032.      THEN
  1033.       BEGIN
  1034.        IF NOT autofirst THEN message(' Lade...');
  1035.        SetPoi(Win);
  1036.        help:=0;
  1037.        reset(lo,datname);
  1038.        IF IOResult=0
  1039.         THEN
  1040.          BEGIN
  1041.  
  1042.           buffer(lo,10000);                      {SpeedUPbuffer}
  1043.  
  1044.           readln(lo,t);                          {DateiKennung ?}
  1045.           IF t=dk THEN V1_1
  1046.                   ELSE IF (t=dk2) OR (t=dk3) THEN V2_11
  1047.            ELSE
  1048.             BEGIN
  1049.              help:=1;
  1050.              close(lo);
  1051.             END
  1052.          END
  1053.         ELSE help:=2;
  1054.  
  1055.        CASE help OF
  1056.         1: message(' Keine APrint V1.1 bis V2.21 Datei');
  1057.         2: message(' Konnte Datei nicht öffnen');
  1058.         3: BEGIN
  1059.             STx[6]:=Abs[0];
  1060.             GT_SetGadgetAttrsA(g[18],WIN,NIL,^STags[6,3]);
  1061.             allfree:=false;
  1062.             IF autofirst THEN autofirst:=false;
  1063.             close(lo);
  1064.             wechseln;
  1065.             message(' Anschrift/-en geladen');
  1066.            END;
  1067.        ELSE;END;
  1068.        ClearPoi(Win);
  1069.       END
  1070.      ELSE message(' Ladevorgang abgebrochen.');
  1071.  END;
  1072.  
  1073. {---------------------------------------------------------------------}
  1074. PROCEDURE Save;
  1075.  VAR sa         : text;STATIC;
  1076.      help       : byte;STATIC;
  1077.      outfile    : BPTR;STATIC;
  1078.      ende       : long;STATIC;
  1079.  
  1080.  FUNCTION WriteIT(TOwrite:string):boolean;
  1081.  VAR strhelp    : string;STATIC;
  1082.      anzahl     : long;
  1083.  BEGIN
  1084.    strhelp:=TOwrite+chr(10);
  1085.    anzahl:=DOSWrite(outfile,^strhelp,StrLen(strhelp));
  1086.    IF anzahl<>StrLen(strhelp)
  1087.     THEN WriteIt:=false
  1088.     ELSE WriteIT:=true;
  1089.  END;
  1090.  
  1091.  PROCEDURE CloseIT;
  1092.   BEGIN
  1093.    ende:=DOSClose(outfile);
  1094.    ende:=DeleteFile(datname);
  1095.    IF ende=(-1)
  1096.     THEN message(' Fehler mit Ausgabedatei  -->  gelöscht')
  1097.     ELSE message(' Fehler mit Ausgabedatei / nicht löschbar');
  1098.   END;
  1099.  
  1100.  BEGIN
  1101.   IF NOT allfree
  1102.    THEN
  1103.     BEGIN
  1104.      RTFile('Anschriften Speichern:');
  1105.      IF not cancel
  1106.       THEN
  1107.        BEGIN
  1108.         Setpoi(Win);
  1109.         message(' Versuche zu speichern...');
  1110.         help:=0;
  1111.  
  1112.         Outfile:=Open(datname,MODE_NEWFILE);
  1113.         IF Outfile=0
  1114.          THEN
  1115.           BEGIN
  1116.            ende:=DOSClose(outfile);
  1117.            message(' Konnte Datei nicht öffnen.');
  1118.            ClearPoi(Win);
  1119.            exit;
  1120.           END
  1121.          ELSE
  1122.           BEGIN
  1123.            IF writeIT(dk3)=false
  1124.             THEN BEGIN CloseIT; ClearPoi(Win);exit;END;
  1125.            FOR i:=0 TO 4 DO
  1126.             IF writeIT(Abs[i])=false
  1127.              THEN BEGIN CloseIT;ClearPoi(Win); exit;END;
  1128.            FOR i:=1 TO 50 DO
  1129.            IF ein[i].frei=false
  1130.             THEN
  1131.              BEGIN
  1132.               IF writeIT(ein[i].name1)=false
  1133.                THEN BEGIN CloseIT;ClearPoi(Win); exit;END;
  1134.               IF writeIT(ein[i].name2)=false
  1135.                THEN BEGIN CloseIT;ClearPoi(Win); exit;END;
  1136.               IF writeIT(ein[i].Nr)   =false
  1137.                THEN BEGIN CloseIT;ClearPoi(Win); exit;END;
  1138.               IF writeIT(ein[i].Ort)  =false
  1139.                THEN BEGIN CloseIT;ClearPoi(Win); exit;END;
  1140.               IF writeIT(ein[i].Tel)  =false
  1141.                THEN BEGIN CloseIT;ClearPoi(Win); exit;END;
  1142.               IF writeIT(ein[i].KZ)   =false
  1143.                THEN BEGIN CloseIT;ClearPoi(Win); exit;END;
  1144.              END;
  1145.            ende:=DOSClose(outfile);
  1146.            message(' Anschriften gespeichert.');
  1147.           END;
  1148.         ClearPoi(Win);
  1149.        END
  1150.       ELSE message(' Speichern abgebrochen.');
  1151.     END
  1152.    ELSE message(' Keine Eintragungen bisher gemacht');
  1153. END;
  1154. {---------------------------------------------------------------------}
  1155. PROCEDURE Sort;
  1156. VAR sflag,sor,help : boolean;STATIC;
  1157.     aust           : rec;STATIC;
  1158.     zahl           : byte;STATIC;
  1159.  
  1160.  PROCEDURE tausch;
  1161.   BEGIN sflag:=false; aust:=ein[i];ein[i]:=ein[i+1]; ein[i+1]:=aust;END;
  1162.  
  1163. BEGIN
  1164.  IF NOT allfree
  1165.   THEN
  1166.    BEGIN
  1167.     i:=1;
  1168.     help:=false;
  1169.     message(' Sortiere...');
  1170.     SetPoi(Win);
  1171.     sor:=true;
  1172.     REPEAT
  1173.      sflag:=true;
  1174.      FOR i:=1 TO 49 DO
  1175.       BEGIN
  1176.        IF (ein[i].frei) AND (ein[i+1].frei=false)
  1177.         THEN
  1178.          BEGIN tausch; IF sor THEN sor:=false; END;
  1179.       END;
  1180.     UNTIL sflag;
  1181.     i:=1;
  1182.     zahl:=0;
  1183.     REPEAT IF ein[i].frei THEN zahl:=i;
  1184.            INC(i);
  1185.     UNTIL  (zahl>0) OR (i=51);
  1186.  
  1187.     REPEAT
  1188.      sflag:=true;
  1189.      FOR i:=1 TO zahl-2 DO
  1190.       BEGIN
  1191.        IF ein[i].kz>ein[i+1].kz
  1192.         THEN
  1193.          BEGIN tausch; IF sor THEN sor:=false; END
  1194.         ELSE IF (ein[i].kz=ein[i+1].kz) AND (ein[i].name2>ein[i+1].name2)
  1195.               THEN BEGIN tausch; IF sor THEN sor:=false; END;
  1196.       END;
  1197.     UNTIL sflag;
  1198.  
  1199.     cycleNrA:=4;
  1200.     cycleA;
  1201.     message(' Daten sortiert');
  1202.     ClearPoi(Win);
  1203.    END
  1204.   ELSE message(' Nichts zum sortieren.');
  1205. END;
  1206. {--------------------------------------------------------------------------}
  1207. FUNCTION LoadCon:boolean;
  1208. VAR load:text;STATIC;
  1209.     s:string;STATIC;
  1210.     p:integer;STATIC;
  1211.  
  1212.  {--- UP LoadCon ---}
  1213.  
  1214.  PROCEDURE raus;
  1215.  BEGIN
  1216.   Close(Load);
  1217.   LoadCon:=false;
  1218.  END;
  1219.  
  1220. BEGIN
  1221.  p:=0;
  1222.  reset(load,'ENVARC:APrint.prefs');
  1223.  IF IOResult<>0
  1224.   THEN BEGIN LoadCon:=false;exit;END;
  1225.  buffer(load,200);
  1226.  readln(load,s);
  1227.  IF s<>Kenn THEN BEGIN raus;exit;END;
  1228.  
  1229.  FOR i:=0 TO 3 DO
  1230.   BEGIN
  1231.    readln(load,s); VAL (s,rr[i],p);
  1232.    IF (p<>0) OR (rr[i]<0) OR (rr[i]>15) THEN BEGIN raus;exit;END;
  1233.    readln(load,s); VAL (s,gg[i],p);
  1234.    IF (p<>0) OR (gg[i]<0) OR (gg[i]>15) THEN BEGIN raus;exit;END;
  1235.    readln(load,s); VAL (s,bb[i],p);
  1236.    IF (p<>0) OR (bb[i]<0) OR (bb[i]>15) THEN BEGIN raus;exit;END;
  1237.   END;
  1238.  
  1239.  readln(load,s); IF s[1]='1' THEN NLQ:=true
  1240.                              ELSE NLQ:=false;
  1241.  
  1242.  readln(load,s); IF s[1]='1' THEN auto:=true
  1243.                              ELSE auto:=false;
  1244.  
  1245.  readln(load,s); IF auto THEN datname:=s ELSE datname:='';
  1246.  readln(load,s); Dirname:=s;
  1247.  readln(load,s); FName:=s;
  1248.  readln(load,s); VAL (s,liRa,p);
  1249.   IF (p=0) AND (liRa IN [0..40])
  1250.    THEN ELSE BEGIN raus; exit;END;
  1251.  readln(load,s); VAL (s,cycleNRC,p);
  1252.   IF (p=0) AND (cycleNRC IN [0..15])
  1253.    THEN ELSE BEGIN raus;exit;END;
  1254.  
  1255.  close(load);
  1256.  LoadCon:=true;
  1257. END;
  1258. {--------------------------------------------------------------------}
  1259.  PROCEDURE ScrError;
  1260.   BEGIN
  1261.    CASE errorcode OF
  1262.     1: RT:=RTReqFirst('APrint V2.21','Oserr-NoMonitor','_Hm');
  1263.     2: RT:=RTReqFirst('APrint V2.21','Oserr-NoChips','_Hm');
  1264.     3: RT:=RTReqFirst('APrint V2.21','Oserr-NoMem','_Hm');
  1265.     4: RT:=RTReqFirst('APrint V2.21','Oserr-NoChipMem','_Hm');
  1266.     5: RT:=RTReqFirst('APrint V2.21','Oserr-PubNotUnique','_Hm');
  1267.     6: RT:=RTReqFirst('APrint V2.21','Oserr-UnknownMode','_Hm');
  1268.    ELSE
  1269.     RT:=RTReqFirst('APrint V2.21','Error (???)','_Hm');
  1270.    END;
  1271.   END;
  1272. {-------------------------------------------------------------------}
  1273. PROCEDURE brchk;
  1274. VAR Wbr2 : cardinal;STATIC;
  1275.     zei  : char;STATIC;
  1276.  PROCEDURE brcheck(x:char);
  1277.   BEGIN
  1278.    Wbr2:=textlength(^PScr^.rastport,x,1);
  1279.    IF Wbr2>Wbr THEN WBr:=WBr2;
  1280.   END;
  1281.  BEGIN
  1282.   FOR zei:=chr($00) TO chr($5E) DO  brcheck(zei);
  1283.   brcheck('ß');brcheck('Ä');brcheck('Ö');brcheck('Ü');
  1284.   brcheck(' ');
  1285.  END;
  1286. {--------------------------------------------------------------------}
  1287. PROCEDURE ende;
  1288. BEGIN
  1289.  RT:=RTReq('APrint V2.21',
  1290.              'Programm abbrechen ?','_JA|_Nein',0);
  1291.  IF RT=1 THEN ex:=true;
  1292. END;
  1293.  
  1294. {#------------------------------- Main -----------------------------#}
  1295.  
  1296. BEGIN
  1297.  IF NOT V37
  1298.   THEN
  1299.    BEGIN
  1300.     ErrorReq('APrint benötigt OS2 oder höher...','Ja',NIL);
  1301.     exit;
  1302.    END;
  1303.  IF NOT OpenReqtools THEN exit;
  1304.  
  1305.  PointerPTR:=NIL;
  1306.  PointerPTR:=PTR(Alloc_Mem(SizeOf(pointerfeld),MEMF_CHIP+MEMF_CLEAR));
  1307.  IF PointerPTR=NIL THEN BEGIN CloseLibs;exit; END;
  1308.  PointerPTR^:=Pointerfeld($0000,$0000,$0400,$07c0,$0000,$07c0,$0100,$0380,
  1309.                           $0000,$07e0,$07c0,$1ff8,$1ff0,$3fec,$3ff8,$7fde,
  1310.                           $3ff8,$7fbe,$7ffc,$ff7f,$7efc,$ffff,$7ffc,$ffff,
  1311.                           $3ff8,$7ffe,$3ff8,$7ffe,$1ff0,$3ffc,$07c0,$1ff8,
  1312.                           $0000,$07e0,$0000,$0000,$0000,$03f2,$0000,$0000);
  1313.  
  1314.  allfree:=true;
  1315.  IF NOT LoadCon
  1316.   THEN
  1317.    BEGIN
  1318.     Grundeinstellung;
  1319.     TTx:=' Konnte Konfiguration nicht laden.'
  1320.    END
  1321.   ELSE TTx:=' Willkommen zu APrint V2.21';
  1322.  
  1323.   {---- Init VARs ------------}
  1324.  
  1325.  FOR i:=1 TO 50 DO ein[i].frei:=true;
  1326.  
  1327.  cycleNrA:=0;
  1328.  cycleNrB:=0;
  1329.  
  1330.  FirstPrt:=true;
  1331.  
  1332.  FOR i:=0 TO 6 DO STx[i]:='';
  1333.  FOR i:=0 TO 4 DO Abs[i]:='';
  1334.  
  1335.  FTags[0]:=TagItem(RTFI_Dir,long(^Dirname));
  1336.  FTags[1].ti_tag:=Tag_Done;
  1337.  
  1338.  FOR i:=0 TO 4 DO CTx[i]:=INTSTR(i+1);
  1339.  FOR i:=0 TO 4 DO cfeld[i]:=^Ctx[i];
  1340.  cfeld[5]:=NIL;
  1341.  
  1342.  VTx:=VTxType('...','Brief','Postkarte','Eilsendung','Luftpost',
  1343.               'Wert','Warensendung','Warensendung # ZERBRECHLICH #',
  1344.               'Büchersendung','Blindensendung','Einschreiben',
  1345.               'Eigenhändig','Nachnahme','Gebühr zahlt Empfänger',
  1346.               'Päckchen');                             {15 EA}
  1347.  
  1348.  FOR i:=0 TO 14 DO
  1349.   Vfeld[i]:=^Vtx[i];
  1350.  Vfeld[15]:=NIL;
  1351.  
  1352.  VTags[0]:=TagItem(GTCY_Active,CycleNrC);
  1353.  VTags[1]:=TagItem(GTCY_LABELS,long(^vfeld));
  1354.  VTags[2]:=TagItem(GA_Disabled,ord(false));
  1355.  VTags[3]:=TagItem(GT_Underscore,ord('_'));
  1356.  VTags[4].ti_Tag:=Tag_Done;
  1357.  
  1358.  CTags[0]:=TagItem(GTCY_Active,0);
  1359.  CTags[1]:=TagItem(GTCY_LABELS,long(^cfeld));
  1360.  CTags[2]:=TagItem(GA_Disabled,ord(false));
  1361.  CTags[3].ti_Tag:=Tag_Done;
  1362.  
  1363.  ITags[0]:=TagItem(GTIN_Maxchars,2);
  1364.  ITags[1]:=TagItem(GT_Underscore,ord('_'));
  1365.  ITags[2]:=TagItem(GTIN_Number,liRa);
  1366.  ITags[3].ti_Tag:=Tag_Done;
  1367.  
  1368.   { um APrint schneller zu machen die vielen einzelnen Tags}
  1369.  
  1370.  CharLen:=CharLenType(35,35,35,35,35,10,60);  {Max.Länge für STRGads}
  1371.  
  1372.  FOR i:=0 TO 5 DO
  1373.   BEGIN
  1374.    STags[i,0]:=TagItem(GT_Underscore,ord('_'));
  1375.    STags[i,1]:=TagItem(GTST_MaxChars,CharLen[i]);
  1376.    STags[i,2]:=TagItem(GA_TabCycle,ord(true));
  1377.    STags[i,3]:=TagItem(GTST_String,long(^STx[i]));
  1378.    STags[i,4]:=TagItem(GA_Disabled,ord(false));
  1379.    STags[i,5].ti_tag:=Tag_Done;
  1380.   END;
  1381.  
  1382.  STags[6,0]:=TagItem(GT_Underscore,ord('_'));
  1383.  STags[6,1]:=TagItem(GTST_MaxChars,CharLen[6]);;
  1384.  STags[6,2]:=TagItem(GA_TabCycle,ord(false));
  1385.  STags[6,3]:=TagItem(GTST_String,long(^STx[6]));
  1386.  STags[6,4]:=TagItem(GA_Disabled,ord(false));
  1387.  STags[6,5].ti_tag:=Tag_Done;
  1388.  
  1389.  GTags[0].ti_Tag:=Tag_Done;
  1390.  GTags[1]:=TagItem(GA_Disabled,ord(false));
  1391.  GTags[2]:=TagItem(GT_Underscore,ord('_'));
  1392.  GTags[3].ti_Tag:=Tag_Done;
  1393.  
  1394.  NWTags[5] :=Tagitem(wa_activate,ord(true));
  1395.  NWTags[6] :=Tagitem(wa_backdrop,ord(true));
  1396.  NWTags[7] :=Tagitem(wa_smartrefresh,ord(true));
  1397.  NWTags[8] :=Tagitem(wa_rmbtrap,ord(true));
  1398.  NWTags[9] :=Tagitem(wa_borderless,ord(true));
  1399.  NWTags[10]:=Tagitem(wa_idcmp,IDCMP_GADGETUP+IDCMP_GADGETDOWN+
  1400.  IDCMP_MOUSEBUTTONS+IDCMP_RAWKEY);
  1401.  NWTags[13].ti_tag:=tag_done;
  1402.  
  1403.  FOR i:=0 TO 1 DO
  1404.   BEGIN
  1405.    CBTags[i,0]:=TagItem(GTCB_Scaled,ord(true));
  1406.    CBTags[i,1]:=TagItem(GT_Underscore,ord('_'));
  1407.    CBTags[i,3].ti_tag:=tag_done;
  1408.   END;
  1409.  
  1410.  SlTags[0]:=TagItem(GA_Immediate,1);
  1411.  SlTags[1]:=TagItem(GA_Relverify,1);
  1412.  SlTags[2]:=TagItem(PGA_Freedom,LORIENT_HORIZ);
  1413.  SlTags[3]:=TagItem(GT_Underscore,ord('_'));
  1414.  SlTags[4]:=TagItem(GTSL_Level,0);
  1415.  SlTags[5].ti_tag:=tag_end;
  1416.  
  1417.  PTitle:='Voreinstellungen:';
  1418.  
  1419.  NWPTags[5] :=Tagitem(wa_activate,ord(true));
  1420.  NWPTags[6] :=Tagitem(wa_smartrefresh,ord(true));
  1421.  NWPTags[7] :=Tagitem(wa_rmbtrap,ord(true));
  1422.  NWPTags[8] :=Tagitem(wa_title,long(^Ptitle));
  1423.  NWPTags[9] :=Tagitem(wa_idcmp,IDCMP_GADGETUP+IDCMP_GADGETDOWN+
  1424.  IDCMP_MOUSEMOVE+IDCMP_RAWKEY+IDCMP_CLOSEWINDOW);
  1425.  NWPTags[12]:=Tagitem(wa_flags,WFLG_CLOSEGADGET+WFLG_DEPTHGADGET+
  1426.                                WFLG_DRAGBAR);
  1427.  NWPTags[13].ti_tag:=tag_done;
  1428.  
  1429.   {---- INIT CustomScreen ----}
  1430.  
  1431.  Scrtitel:='APrint V2.21 © by PackMAN (Falk Zühlsdorff) 30.11.94';
  1432.  PScr:=lockpubscreen('Workbench');
  1433.  drawinfo:=getscreendrawinfo(PScr);
  1434.  IF drawinfo=NIL
  1435.   THEN
  1436.    BEGIN
  1437.     RT:=RTReqFirst('APrint V2.21','Fehler bei GetScreenDrawInfo',
  1438.                     '_Argh');
  1439.     CloseLibs;
  1440.     exit;
  1441.    END;
  1442.  
  1443.  font:=drawinfo^.dri_font;
  1444.  ysize:=font^.tf_ysize;
  1445.  baseline:=font^.tf_baseline;
  1446.  Wbr:=0;
  1447.  brchk;
  1448.  
  1449.  screen_modeID:=GetVPModeID(^PScr^.ViewPort);
  1450.  
  1451.  freescreendrawinfo(PScr,drawinfo);
  1452.  unlockpubscreen(NIL,PScr);
  1453.  errorcode:=0;
  1454.  NSTags[1]:=tagitem(sa_left,0);
  1455.  NSTags[2]:=tagitem(sa_top,0);
  1456.  NSTags[3]:=tagitem(sa_width,80*Wbr);
  1457.  NSTags[4]:=tagitem(sa_height,32*ysize);
  1458.  NSTags[5]:=tagitem(sa_depth,2);
  1459.  NSTags[6]:=tagitem(sa_pens,long(^tag_col));
  1460.  NSTags[7]:=tagitem(sa_sysfont,1);
  1461.  NSTags[8]:=tagitem(sa_type,CUSTOMSCREEN);
  1462.  NSTags[9]:=tagitem(sa_displayID,screen_modeID);
  1463.  NSTags[10]:=tagitem(sa_overscan,Oscan_Text);
  1464.  NSTags[11]:=tagitem(sa_autoscroll,ord(True));
  1465.  NSTags[12]:=tagitem(sa_behind,ord(True));
  1466.  NSTags[13]:=tagitem(sa_title,long(^SCRTitel));
  1467.  NSTags[14]:=tagitem(sa_errorcode,long(^errorcode));
  1468.  NSTags[15].ti_tag:=tag_done;
  1469.  
  1470.  tag_col:=tag_col_array(0,1,1,2,1,3,1,0,2,-1);{jetzt hat dopW auch}
  1471.                                               {eine Screenleiste}
  1472.  Screen:=OpenScreenTagList(NIL,^NSTags);
  1473.  IF Screen=NIL THEN BEGIN ScrError; exit;END;
  1474.  
  1475.  IF screen^.barheight-2<>ysize THEN {Falls der Screenfont nach dem}
  1476.   BEGIN                             {Rechnerstart geändert wurde  }
  1477.    barheight:=screen^.barheight;    {und wegen offenem Win nicht  }
  1478.    screenhelp:=CloseScreen(Screen); {gleich total übernommen wird.}
  1479.    Screen:=NIL;
  1480.    NSTags[4]:=tagitem(sa_height,31*ysize+barheight-2);
  1481.    Screen:=OpenScreenTagList(NIL,^NSTags);
  1482.    IF Screen=NIL THEN BEGIN ScrError; exit;END;
  1483.   END;
  1484.  PSCr:=NIL;
  1485.  PScr:=lockpubscreen(nil);              {jetzt cloned screen}
  1486.  vi:=GetVisualinfoA(PScr,nil);
  1487.  UnlockPubScreen(NIL,PScr);
  1488.  Pgad:=NIL;
  1489.  Pgad:=CreateContext(^Glist);
  1490.  PPgad:=NIL;
  1491.  PPgad:=CreateContext(^PGlist);
  1492.  IF (pgad=nil) OR (PPGad=NIL)
  1493.   THEN
  1494.    BEGIN
  1495.     RT:=RTReqFirst('APrint V2.21','Gadgets nicht vereinbar.',
  1496.                    '_Argh');
  1497.     screenhelp:=CloseScreen(Screen);
  1498.     CloseLibs;
  1499.     exit;
  1500.    END;
  1501.  
  1502.  fontname:=drawinfo^.dri_font^.tf_Message.mn_Node.ln_Name;
  1503.  txattr:=TextAttr(fontname,ysize,0,0);
  1504.  
  1505.  FOR i:=0 TO 3 DO setcolor(i,rr[i],gg[i],bb[i]);
  1506.  
  1507.  freibr:=textlength(^Screen^.rastport,'frei',4);
  1508.  
  1509.  IF Odd(ysize) THEN plus:=-2 ELSE plus:=0;
  1510.  
  1511.  RTFTags[0]:=TagItem(RT_TextAttr,long(^txattr));
  1512.  RTFTags[2]:=TagItem(RT_LockWindow,1);
  1513.  RTFTags[3].ti_tag:=Tag_Done;
  1514.  
  1515.  BBtags[0]:=TagItem(GTBB_Recessed,1);
  1516.  BBtags[1]:=TagItem(GT_VisualInfo,long(vi));
  1517.  BBTags[2].ti_tag:=Tag_End;
  1518.  
  1519.   ng:=NewGadget(Wbr,ysize,11*Wbr,ysize+6,NIL,^txattr,0,0,vi,nil);
  1520.  
  1521.   FOR i:=0 TO 9 DO
  1522.    BEGIN
  1523.     ng.ng_TopEdge  :=1+ysize+(2*i*ysize);
  1524.     ng.ng_GadgetID :=i;
  1525.     pgad:=CreateGadgetA(GENERIC_KIND,pgad,^ng,NIL);
  1526.     g[i]:=pgad;
  1527.     g[i]^.GadgetType:=GTYP_BOOLGADGET;
  1528.     g[i]^.Activation:=GACT_RELVERIFY;
  1529.     g[i]^.Flags:=0;
  1530.    END;
  1531.  
  1532.   ng:=NewGadget(Wbr*4,23*ysize+1,5*Wbr,ysize+6,NIL,
  1533.                 ^txattr,10,0,vi,nil);
  1534.   pgad:=CreateGadgetA(CYCLE_KIND,pgad,^ng,^CTags[0]);
  1535.   g[10]:=pgad;
  1536.  
  1537.   ng:=NewGadget(Wbr,27*ysize+1,11*Wbr,ysize+6,'So_rtieren',
  1538.                 ^txattr,11,PLACETEXT_IN,vi,nil);
  1539.   pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
  1540.   g[11]:=pgad;
  1541.  
  1542.   ng:=NewGadget(Wbr*26,ysize+1,38*Wbr,ysize+6,'1.N_ame:',
  1543.                 ^txattr,12,PLACETEXT_LEFT,vi,nil);
  1544.   pgad:=CreateGadgetA(STRING_KIND,pgad,^ng,^STags[0]);
  1545.   g[12]:=pgad;
  1546.  
  1547.   ng.ng_TopEdge:=3*ysize+1;
  1548.   ng.ng_GadgetID:=13;
  1549.   ng.ng_GadgetText:='2.Na_me:';
  1550.   pgad:=CreateGadgetA(STRING_KIND,pgad,^ng,^STags[1]);
  1551.   g[13]:=pgad;
  1552.  
  1553.   ng.ng_TopEdge:=5*ysize+1;
  1554.   ng.ng_GadgetID:=14;
  1555.   ng.ng_GadgetText:='Stra_ße:';
  1556.   pgad:=CreateGadgetA(STRING_KIND,pgad,^ng,^STags[2]);
  1557.   g[14]:=pgad;
  1558.  
  1559.   ng.ng_TopEdge:=7*ysize+1;
  1560.   ng.ng_GadgetID:=15;
  1561.   ng.ng_GadgetText:='PLZ/_Ort:';
  1562.   pgad:=CreateGadgetA(STRING_KIND,pgad,^ng,^STags[3]);
  1563.   g[15]:=pgad;
  1564.  
  1565.   ng.ng_TopEdge:=9*ysize+1;
  1566.   ng.ng_GadgetID:=16;
  1567.   ng.ng_GadgetText:='_Tel:';
  1568.   pgad:=CreateGadgetA(STRING_KIND,pgad,^ng,^STags[4]);
  1569.   g[16]:=pgad;
  1570.  
  1571.   ng.ng_TopEdge:=11*ysize+1;
  1572.   ng.ng_Width:=14*Wbr;
  1573.   ng.ng_GadgetID:=17;
  1574.   ng.ng_GadgetText:='_Kürzel:';
  1575.   pgad:=CreateGadgetA(STRING_KIND,pgad,^ng,^STags[5]);
  1576.   g[17]:=pgad;
  1577.  
  1578.   ng.ng_TopEdge:=15*ysize+1;
  1579.   ng.ng_Width:=53*Wbr;
  1580.   ng.ng_GadgetID:=18;
  1581.   ng.ng_GadgetText:='A_bs:';
  1582.   pgad:=CreateGadgetA(STRING_KIND,pgad,^ng,^STags[6]);
  1583.   g[18]:=pgad;
  1584.  
  1585.   ng:=NewGadget(14*Wbr,15*ysize+1,5*Wbr,ysize+6,NIL,
  1586.                 ^txattr,30,0,vi,nil);
  1587.   pgad:=CreateGadgetA(CYCLE_KIND,pgad,^ng,^CTags[0]);
  1588.   g[30]:=pgad;
  1589.  
  1590.   ng:=NewGadget(Wbr*29,19*ysize+1,35*Wbr,ysize+6,'_Verwendung:',
  1591.                 ^txattr,32,PLACETEXT_LEFT,vi,nil);
  1592.   pgad:=CreateGadgetA(CYCLE_KIND,pgad,^ng,^VTags[0]);
  1593.   g[32]:=pgad;
  1594.  
  1595.   ng:=NewGadget(17*Wbr,22*ysize+1,11*Wbr,ysize+6,'L_öschen',
  1596.                ^txattr,19,PLACETEXT_IN,vi,nil);
  1597.   pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
  1598.   g[19]:=pgad;
  1599.  
  1600.   ng.ng_LeftEdge:=29*Wbr;
  1601.   ng.ng_GadgetID:=20;
  1602.   ng.ng_GadgetText:='_Neu';
  1603.   pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
  1604.   g[20]:=pgad;
  1605.  
  1606.   ng.ng_LeftEdge:=41*Wbr;
  1607.   ng.ng_GadgetID:=21;
  1608.   ng.ng_GadgetText:='_Laden';
  1609.   pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
  1610.   g[21]:=pgad;
  1611.  
  1612.   ng.ng_LeftEdge:=53*Wbr;
  1613.   ng.ng_GadgetID:=22;
  1614.   ng.ng_GadgetText:='_Speichern';
  1615.   pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
  1616.   g[22]:=pgad;
  1617.  
  1618.   ng.ng_LeftEdge:=65*Wbr;
  1619.   ng.ng_GadgetID:=23;
  1620.   ng.ng_GadgetText:='Pre_fs';
  1621.   pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
  1622.   g[23]:=pgad;
  1623.  
  1624.   ng.ng_LeftEdge:=17*Wbr;
  1625.   ng.ng_TopEdge:=24*ysize+1;
  1626.   ng.ng_GadgetID:=24;
  1627.   ng.ng_GadgetText:='_Info';
  1628.   pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
  1629.   g[24]:=pgad;
  1630.  
  1631.   ng.ng_LeftEdge:=29*Wbr;
  1632.   ng.ng_GadgetID:=25;
  1633.   ng.ng_GadgetText:='_Hilfe';
  1634.   pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
  1635.   g[25]:=pgad;
  1636.  
  1637.   ng.ng_LeftEdge:=41*Wbr;
  1638.   ng.ng_GadgetID:=26;
  1639.   ng.ng_GadgetText:='_Drucken';
  1640.   pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
  1641.   g[26]:=pgad;
  1642.  
  1643.   ng.ng_LeftEdge:=53*Wbr;
  1644.   ng.ng_GadgetID:=27;
  1645.   ng.ng_GadgetText:='List_Print';
  1646.   pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
  1647.   g[27]:=pgad;
  1648.  
  1649.   ng.ng_LeftEdge:=65*Wbr;
  1650.   ng.ng_GadgetID:=28;
  1651.   ng.ng_GadgetText:='_Ende';
  1652.   pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
  1653.   g[28]:=pgad;
  1654.  
  1655.   ng.ng_LeftEdge:=53*Wbr;
  1656.   ng.ng_TopEdge:=11*ysize+1;
  1657.   ng.ng_GadgetID:=29;
  1658.   ng.ng_GadgetText:='_Copy';
  1659.   pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
  1660.   g[29]:=pgad;
  1661.  
  1662.   TTags[0]:=TagItem(GTTX_Border,ord(true));
  1663.   TTags[1]:=TagItem(GTTX_Justification,GTJ_CENTER);
  1664.   TTags[2]:=TagItem(GTTX_Text,long(^TTx));
  1665.   TTags[3].ti_Tag:=Tag_Done;
  1666.  
  1667.   ng.ng_TopEdge:=27*ysize+1;
  1668.   ng.ng_LeftEdge:=26*Wbr;
  1669.   ng.ng_GadgetID:=31;
  1670.   ng.ng_GadgetText:='Status:';
  1671.   ng.ng_Width:=53*Wbr;
  1672.   ng.ng_Flags:=PLACETEXT_LEFT;
  1673.   pgad:=CreateGadgetA(TEXT_KIND,pgad,^ng,^TTags[0]);
  1674.   g[31]:=pgad;
  1675.  
  1676.   ng.ng_LeftEdge:=10*Wbr;
  1677.   ng.ng_Width:=15*Wbr;
  1678.   ng.ng_Height:=ysize;
  1679.  
  1680.   FOR i:=0 TO 2 DO
  1681.    BEGIN
  1682.     ng.ng_TopEdge:=3*ysize+(i*2*Ysize);
  1683.     ng.ng_GadgetID:=i;
  1684.     CASE i OF
  1685.      0: ng.ng_GadgetText:='_R';
  1686.      1: ng.ng_GadgetText:='_G';
  1687.      2: ng.ng_GadgetText:='_B';
  1688.     ELSE;END;
  1689.     Ppgad:=CreateGadgetA(SLIDER_KIND,Ppgad,^ng,^SlTags[0]);
  1690.     Pg[i]:=Ppgad;
  1691.    END;
  1692.  
  1693.   ng.ng_TopEdge:=3*ysize+2;
  1694.   ng.ng_Width:=4*Wbr-4;
  1695.   ng.ng_Height:=2*ysize-2;
  1696.   ng.ng_GadgetText:='';
  1697.   ng.ng_Flags:=0;
  1698.  
  1699.   FOR i:=0 TO 1 DO
  1700.    BEGIN
  1701.     ng.ng_LeftEdge:=42*Wbr+i*5*Wbr+2;
  1702.     ng.ng_GadgetID:=i+3;
  1703.  
  1704.     Ppgad:=CreateGadgetA(GENERIC_KIND,Ppgad,^ng,NIL);
  1705.     Pg[i+3]:=Ppgad;
  1706.     Pg[i+3]^.GadgetType:=GTYP_BOOLGADGET;
  1707.     Pg[i+3]^.ACTIVATION:=GACT_RELVERIFY;
  1708.     Pg[i+3]^.Flags     :=GFLG_GADGHBOX;
  1709.    END;
  1710.  
  1711.   ng.ng_TopEdge:=6*ysize;
  1712.  
  1713.   FOR i:=0 TO 1 DO
  1714.    BEGIN
  1715.     ng.ng_LeftEdge:=42*Wbr+i*5*Wbr+2;
  1716.     ng.ng_GadgetID:=i+5;
  1717.  
  1718.     Ppgad:=CreateGadgetA(GENERIC_KIND,Ppgad,^ng,NIL);
  1719.     Pg[i+5]:=Ppgad;
  1720.     Pg[i+5]^.GadgetType:=GTYP_BOOLGADGET;
  1721.     Pg[i+5]^.ACTIVATION:=GACT_RELVERIFY;
  1722.     Pg[i+5]^.Flags     :=GFLG_GADGHBOX;
  1723.    END;
  1724.  
  1725.   ng:=NewGadget(14*Wbr,10*ysize,11*Wbr,ysize+6,'Stan_dard',
  1726.                ^txattr,7,PLACETEXT_IN,vi,nil);
  1727.   Ppgad:=CreateGadgetA(BUTTON_KIND,Ppgad,^ng,^GTags[1]);
  1728.   Pg[7]:=Ppgad;
  1729.  
  1730.   ng.ng_LeftEdge:=35*Wbr;
  1731.   ng.ng_GadgetID:=8;
  1732.   ng.ng_GadgetText:='Rückse_tzen';
  1733.   Ppgad:=CreateGadgetA(BUTTON_KIND,Ppgad,^ng,^GTags[1]);
  1734.   Pg[8]:=Ppgad;
  1735.  
  1736.   ng.ng_TopEdge:=21*ysize-ROUND(Wbr/2);
  1737.   ng.ng_LeftEdge:=11*Wbr;
  1738.   ng.ng_GadgetID:=9;
  1739.   ng.ng_GadgetText:='_Speichern';
  1740.   Ppgad:=CreateGadgetA(BUTTON_KIND,Ppgad,^ng,^GTags[1]);
  1741.   Pg[9]:=Ppgad;
  1742.  
  1743.   ng.ng_LeftEdge:=25*Wbr-ROUND(Wbr/2);
  1744.   ng.ng_GadgetID:=10;
  1745.   ng.ng_GadgetText:='Benut_zen';
  1746.   Ppgad:=CreateGadgetA(BUTTON_KIND,Ppgad,^ng,^GTags[1]);
  1747.   Pg[10]:=Ppgad;
  1748.  
  1749.   ng.ng_LeftEdge:=39*Wbr-ROUND(Wbr/2);
  1750.   ng.ng_GadgetID:=11;
  1751.   ng.ng_GadgetText:='_Abbruch';
  1752.   Ppgad:=CreateGadgetA(BUTTON_KIND,Ppgad,^ng,^GTags[1]);
  1753.   Pg[11]:=Ppgad;
  1754.  
  1755.   ng:=NewGadget(11*Wbr,16*ysize,ROUND((ysize+3)*(26/11)),ysize+3
  1756.                ,'_NLQ',^txattr,12,PLACETEXT_ABOVE,vi,nil);
  1757.   Ppgad:=CreateGadgetA(CHECKBOX_KIND,Ppgad,^ng,^CBTags[0]);
  1758.   Pg[12]:=Ppgad;
  1759.  
  1760.   ng.ng_LeftEdge:=46*Wbr;
  1761.   ng.ng_GadgetID:=13;
  1762.   ng.ng_GadgetText:='Aut_oLoad';
  1763.   Ppgad:=CreateGadgetA(CHECKBOX_KIND,Ppgad,^ng,^CBTags[1]);
  1764.   Pg[13]:=Ppgad;
  1765.  
  1766.   ng.ng_Height:=ysize+6;
  1767.   ng.ng_Width:=5*Wbr;
  1768.   ng.ng_LeftEdge:=27*Wbr+ROUND(Wbr/2);
  1769.   ng.ng_GadgetID:=14;
  1770.   ng.ng_GadgetText:='lin_ker Rand';
  1771.   Ppgad:=CreateGadgetA(INTEGER_KIND,Ppgad,^ng,^ITags);
  1772.   Pg[14]:=Ppgad;
  1773.  
  1774.   NWTags[1] :=Tagitem(wa_left,0);
  1775.   NWTags[2] :=Tagitem(wa_top,screen^.barheight+1);
  1776.   NWTags[3] :=Tagitem(wa_width,80*Wbr);
  1777.   NWTags[4] :=Tagitem(wa_height,31*ysize-3);
  1778.   NWTags[11]:=Tagitem(wa_CustomScreen,long(Screen));
  1779.   NWTags[12]:=Tagitem(wa_Gadgets,long(glist));
  1780.  
  1781.   NWPTags[1] :=Tagitem(wa_left,10*Wbr);
  1782.   NWPTags[2] :=Tagitem(wa_top,screen^.barheight+1+2*ysize);
  1783.   NWPTags[3] :=Tagitem(wa_width,60*Wbr);
  1784.   NWPTags[4] :=Tagitem(wa_height,25*ysize);
  1785.   NWPTags[10]:=Tagitem(wa_CustomScreen,long(Screen));
  1786.   NWPTags[11]:=Tagitem(wa_Gadgets,long(Pglist));
  1787.  
  1788.   Win:=openwindowtaglist(nil,^NWTags[1]);
  1789.   IF Win=NIL
  1790.    THEN
  1791.     BEGIN
  1792.      RT:=RTReqFirst('APrint V2.21','Hauptfenster nicht zu öffnen',
  1793.                     '_Argh');
  1794.      screenhelp:=CloseScreen(Screen);
  1795.      CloseLibs;
  1796.      exit;
  1797.     END;
  1798.  
  1799.   RP:=Win^.RPort;
  1800.   ourfont:=setfont(RP,font);
  1801.  
  1802.   PrcH:=FindTask(Nil);
  1803.   Prc:=PrcH;
  1804.   OWin:=Prc^.pr_WindowPtr;
  1805.   Prc^.pr_WindowPtr:=WIN;
  1806.  
  1807.   GT_RefreshWindow(WIN,NIL);
  1808.  
  1809.   FOR i:=0 TO 9 DO
  1810.    BEGIN
  1811.     DrawBevelBoxA(RP,Wbr+1,ysize+1+(i*2*ysize),
  1812.                  11*Wbr-1,ysize+6,^BBTags[1]);
  1813.    END;
  1814.  
  1815.   SetAPen(RP,2);
  1816.   Move(RP,13*Wbr,0);
  1817.   Draw(RP,13*Wbr,31*ysize-3);
  1818.  
  1819.   SetAPen(RP,1);
  1820.   Move(RP,13*Wbr-1,0);
  1821.   Draw(RP,13*Wbr-1,31*ysize-3);
  1822.  
  1823.   SetAPen(RP,2);
  1824.   Move(RP,13*Wbr,14*ysize);
  1825.   Draw(RP,80*Wbr-2,14*ysize);
  1826.  
  1827.   Move(RP,13*Wbr,18*ysize);
  1828.   Draw(RP,80*Wbr-2,18*ysize);
  1829.  
  1830.   SetAPen(RP,1);
  1831.   Move(RP,13*Wbr+1,14*ysize-1);
  1832.   Draw(RP,80*Wbr,14*ysize-1);
  1833.  
  1834.   Move(RP,13*Wbr+1,18*ysize-1);
  1835.   Draw(RP,80*Wbr,18*ysize-1);
  1836.  
  1837.   DrawBevelBoxA(RP,0,0,80*Wbr,31*ysize-3,^BBTags[1]);
  1838.  
  1839.   ScreenToFront(SCREEN);
  1840.  
  1841.  {--- Normal Work ----}
  1842.  
  1843.  wechseln;
  1844.  
  1845.  IF (auto) and (datname<>'') THEN
  1846.   BEGIN autofirst:=true;
  1847.         message(' AutoLoad-Modus. Bitte warten Lade...');
  1848.         load;
  1849.   END;
  1850.  
  1851.  autofirst:=false;
  1852.  
  1853.  ex:=false;
  1854.  
  1855.  REPEAT
  1856.   Msg:=Wait_Port(Win^.UserPort);
  1857.   Msg:=GT_GetIMsg(WIN^.UserPort);
  1858.   GT_ReplyIMsg(Msg);
  1859.  
  1860.   Akt:=Msg^.IAddress;
  1861.   CASE Msg^.class OF
  1862.  
  1863.    IDCMP_GADGETUP:
  1864.  
  1865.     CASE Akt^.GadgetID OF
  1866.      0..9: Ausgabe(Akt^.GadgetID+1);
  1867.  
  1868.        10: BEGIN CycleNrA:=Msg^.Code; wechseln;END;
  1869.        11: sort;
  1870.        12..16: StrAkt:=ActivateGadget(g[Akt^.GadgetID+1],WIN,NIL);
  1871.  
  1872.        19: BEGIN loeschen;
  1873.                  message(' Eintrag gelöscht.');END;
  1874.        20: neu;
  1875.        21: load;
  1876.        22: save;
  1877.        23: prefs;
  1878.        24: InfoLine;
  1879.        25: HelpLine;
  1880.        26: Drucken(0);
  1881.        27: Drucken(1);
  1882.        28: ende;
  1883.        29: KopDel(1);
  1884.        30: BEGIN
  1885.             sig:=g[18]^.SpecialInfo;
  1886.             Abs[cycleNrB]:=sig^.buffer;
  1887.             CycleNrB:=Msg^.Code;
  1888.             STx[6]:=Abs[cycleNrB];
  1889.             GT_SetGadgetAttrsA(g[18],WIN,NIL,^STags[6,3]);
  1890.            END;
  1891.        32: CycleNrC:=Msg^.Code;
  1892.     ELSE;END;
  1893.  
  1894.    IDCMP_RAWKEY:
  1895.     BEGIN
  1896.      Code:=Msg^.Code;
  1897.      CASE (Code AND $7f) OF
  1898.       $60: IF (Code AND $80)=0
  1899.             THEN gedr1:=true ELSE gedr1:=false;
  1900.       $61: IF (Code AND $80)=0
  1901.             THEN gedr2:=true ELSE gedr2:=false;
  1902.  
  1903.       ELSE
  1904.        CASE Msg^.code OF
  1905.         $11: cycleA;                                 {W @}
  1906.         $20: StrAkt:=ActivateGadget(g[12],WIN,NIL);  {A}
  1907.         $37: StrAkt:=ActivateGadget(g[13],WIN,NIL);  {M}
  1908.         $0B: StrAkt:=ActivateGadget(g[14],WIN,NIL);  {ß}
  1909.         $18: StrAkt:=ActivateGadget(g[15],WIN,NIL);  {O}
  1910.         $27: StrAkt:=ActivateGadget(g[17],WIN,NIL);  {K}
  1911.         $35: StrAkt:=ActivateGadget(g[18],WIN,NIL);  {B}
  1912.         $14: StrAkt:=ActivateGadget(g[16],WIN,NIL);  {T}
  1913.         $32: cycleB;                                 {X @}
  1914.         $17: BEGIN PButton(Win,g[24],1); InfoLine;   {I} END;
  1915.         $19: BEGIN PButton(Win,g[27],1); Drucken(1); {P} END;
  1916.         $25: BEGIN PButton(Win,g[25],1); HelpLine;   {H} END;
  1917.         $36: BEGIN PButton(Win,g[20],1); Neu;        {N} END;
  1918.         $21: BEGIN PButton(Win,g[22],1); save;       {S} END;
  1919.         $22: BEGIN PButton(Win,g[26],1); Drucken(0); {D} END;
  1920.         $28: BEGIN PButton(Win,g[21],1); load;       {L} END;
  1921.         $13: BEGIN PButton(Win,g[11],1); sort;       {O} END;
  1922.         $12,
  1923.         $45: BEGIN PButton(Win,g[28],1); ende;       {E} END;
  1924.         $33: BEGIN PButton(Win,g[29],1); KopDel(1);  {C} END;
  1925.         $34: cycleC;
  1926.         $29: BEGIN PButton(Win,g[19],1); loeschen;   {Ö}
  1927.                    message(' Eintrag gelöscht.');      END;
  1928.         $01..$0A: BEGIN PButton(Win,g[long(Msg^.Code-1)],0);
  1929.                         Ausgabe(long(Code));           END;
  1930.  
  1931.         $23: BEGIN PButton(Win,g[23],1); Prefs;      {F} END;
  1932.        ELSE;END;
  1933.       END;
  1934.     END;
  1935.  
  1936.   ELSE;END;
  1937.  
  1938.  UNTIL ex;
  1939.  
  1940.  Prc^.pr_WindowPtr:=OWin;
  1941.  CloseSome;
  1942. END.
  1943.  
  1944.